package com.example.demokotlin

import org.junit.Test


/**
 * 数据类测试
 * toString()、 equals()、 hashCode() 以及 copy()
 *
 * @author zhouronghua
 * @time 2021/9/15 8:57 上午
 */
class DataClassTest {

    /**
     * 数据类：学生
     *
     * 1）主构造函数需要至少有一个参数；
     * 2）主构造函数的所有参数需要标记为 val 或 var；
     * 3）数据类不能是抽象、开放、密封或者内部的；
     * 4）数据类只能实现接口。
     *
     * @author zhouronghua
     * @time 2021/9/16 8:54 上午
     */
    data class Student(var name: String, var numID: String) {
        /**
         * 年龄（次构造函数成员不会参与对象拷贝）
         */
        var age: Int = 0

        constructor(name: String, numID: String, age: Int) : this(name, numID) {
            this.age = age
        }

        override fun toString(): String {
            return "Student(name='$name', numID='$numID', age=$age)"
        }


    }

    /**
     * 测试数据类拷贝
     *
     * @author zhouronghua
     * @time 2021/9/16 8:59 上午
     */
    @Test
    fun testCopy() {
        var p = Student("李明", "10011", 18)
        p.age = 18
        println(p)
        // 值拷贝主构造参数，不管次构造函数成员
        var p2 = p.copy()
        println(p2)
        println("===测试数据类型解构===")
        val (name, id) = p
        println("解构成员 name:$name numID:$id")
    }
}